Q7 次のような100x100ピクセルのビットマップファイルを作ってください。
Q7 次のような100x100ピクセルのビットマップファイルを作ってください。
https://gyazo.com/489e6c6ed29fa76b937fd85c1672112e
これは普段シェル芸で画像生成をやったことあるかどうかに左右されるので解ける人解けない人がだいぶ分かれそう
僕は以前シェル芸でやったことがあったのと、Nimでpnmというライブラリを作ったことがあったので思いつけた 僕の解答
code:pnm.sh
(
echo P1
echo 100 100
x=0; for i in {1..100}; do for j in {1..100}; do x=$((x ^ 1)); echo -n "$x "; done; x=$((x ^ 1)); done
) | convert - a.bmp
ピクセルでこの市松模様をどう作るか
ここでPNM P1(PBM Portable bit map)という書式の画像を作ることを考える なので、0 1 をそれぞれ黒 白としてPNMのデータに追加する
$ echo $(( 0 ^ 1 )) $(( 1 ^ 1 ));
1 0
ただこのままだと次のループでも同じ0 1の値になってしまって、市松模様ではなく縦線の画像になってしまう
なので、ループが終わったタイミングで更にXORする
市松模様のデータは作れたので、あとはPBM画像のヘッダ情報を付与
P1なのでP1
100x100ピクセルなので100 100
あとはconvertに標準入力から渡して、bmpとして保存
結構頭ひねったので面白かった
上田先生の解答
$ echo P1 100 100 $(seq 10000 | awk '{print ($1+int(($1-1)/100))%2}') | convert - check.bmp
おしゃれな解答だと思った
2で余りを求めるのをいい感じに組み合わせるというアプローチ
むしろ僕はなんで2で割った余り使う方を思いつかなかった・・・